<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>PatchUnicode#2478365no | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀Unicode版開発トップへ</a>
        <li><div class="list-title">
    <span class="no">786</span>
    <a class="thread-title" href="786.html#786">PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">787</span>
    <a class="thread-title" href="786.html#787">Re:PatchUnicode#2478365の是非</a></div>
    </li><li><div class="list-title">
    <span class="no">788</span>
    <a class="thread-title" href="786.html#788">Re:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">789</span>
    <a class="thread-title" href="786.html#789">Re2:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">790</span>
    <a class="thread-title" href="786.html#790">Re3:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">791</span>
    <a class="thread-title" href="786.html#791">Re4:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">792</span>
    <a class="thread-title" href="786.html#792">Re5:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">793</span>
    <a class="thread-title" href="786.html#793">Re6:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">794</span>
    <a class="thread-title" href="786.html#794">Re7:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">795</span>
    <a class="thread-title" href="786.html#795">Re8:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">796</span>
    <a class="thread-title" href="786.html#796">Re9:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">800</span>
    <a class="thread-title" href="786.html#800">Re10:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">801</span>
    <a class="thread-title" href="786.html#801">Re11:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">808</span>
    <a class="thread-title" href="786.html#808">Re12:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">813</span>
    <a class="thread-title" href="786.html#813">Re13:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">815</span>
    <a class="thread-title" href="786.html#815">Re14:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">829</span>
    <a class="thread-title" href="786.html#829">Re15:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">830</span>
    <a class="thread-title" href="786.html#830">Re16:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">832</span>
    <a class="thread-title" href="786.html#832">Re17:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">833</span>
    <a class="thread-title" href="786.html#833">Re18:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">834</span>
    <a class="thread-title" href="786.html#834">Re19:PatchUnicode#2478365no</a></div>
    </li><li><div class="list-title">
    <span class="no">835</span>
    <a class="thread-title" href="786.html#835">Re19:PatchUnicode#2478365no</a></div>
    <ul><li><div class="list-title">
    <span class="no">836</span>
    <a class="thread-title" href="786.html#836">Re20:PatchUnicode#2478365no</a></div>
    </li></ul></li></ul></li></ul></li></ul></li><li><div class="list-title">
    <span class="no">831</span>
    <a class="thread-title" href="786.html#831">Re16:PatchUnicode#2478365no</a></div>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li>
    </ul><ul class="main"><li><section><h1 id=786>
    <span class="no">[786]</span>
    <a class="thread-title" href="#786">PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-01-23T17:25:53">2009年01月23日 17:25</time></h1>
    <div class="body">　(文字コード変換)文字として読めないデータを<br>　テキストで表現するように　　PatchUnicode#2478365<br><br>すみません、上記のパッチをどうしようかと迷っています。<br>テキストでない何かを読み込んだ時に、<br>半角英数字 "FF"とか、/[0-9A-F]{2}/にマッチするものが<br>正しく検索できなくなる事などで反対意見があれば、<br>却下(DELETE)したいと思っています。<br><br>どうでしょうか、コメントよろしくお願いします。。。<br></div></section>
    <ul><li><section><h1 id=787>
    <span class="no">[787]</span>
    <a class="thread-title" href="#787">Re:PatchUnicode#2478365の是非</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-01-23T17:26:58">2009年01月23日 17:26</time></h1>
    <div class="body">タイトル打ち込み中に<br>えんたーキーで投稿してしまいましたすみません。<br><br>タイトル：<br>PatchUnicode#2478365の是非</div></section>
    </li><li><section><h1 id=788>
    <span class="no">[788]</span>
    <a class="thread-title" href="#788">Re:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-01-24T22:21:32">2009年01月24日 22:21</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; 　(文字コード変換)文字として読めないデータを<br>&gt; 　テキストで表現するように　　PatchUnicode#2478365<br><br>え、と。自分はこのパッチを適用したときの利点がよくわかってません、すみません。(^^;;;</div></section>
    <ul><li><section><h1 id=789>
    <span class="no">[789]</span>
    <a class="thread-title" href="#789">Re2:PatchUnicode#2478365no</a>
    <span class="author">げんた</span>
    <time datetime="2009-01-25T02:08:13">2009年01月25日 02:08</time></h1>
    <div class="body">変換できない文字が混入したファイルを開いて保存すると，内容が変わってしまう問題を解決したいと言うことでしょうか．<br>それともバイナリ部分も編集できるようにしたいのかな？<br><br>文字コードとして不正なバイト列が混入していることを分かるようにするというのであれば"ffff" + 16進で表現するのではなくてUnicodeの空いている部分にマップするなりして通常の文字とは異なるコードとして扱い，表示時に特殊文字として扱うようなアプローチの方が良いと思います．<br><br>UNICODE上あり得ないコードと言うことでffffなのでしょうけど，外字領域を255文字使ってマップして，表示用のフォントを登録するとか(動的にできるのかな？やり方がちょっと分かりませんが...) 外字領域を避けて全然使っていないところを使おうとするとサロゲートペアになるのかな．(これこそフォントで何とかできるのか不明ですが...)<br></div></section>
    <ul><li><section><h1 id=790>
    <span class="no">[790]</span>
    <a class="thread-title" href="#790">Re3:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-01-26T17:21:59">2009年01月26日 17:21</time></h1>
    <div class="body">とりあえず。<br><br>U+D800からU+D8FFまでに不正なバイト列<br>をマップするようにしてみました。<br>使用領域(U+E000からU+F800)のU+F000からU+F0FFまでに<br>対応付けるようにもしてみましたが、U+F000からU+F0FF<br>までを不正バイト列扱いにするのが惜しまれたので、<br>上位サロゲート片で表現するようにしました。<br><br>&gt; え、と。自分はこのパッチを適用したときの利点が<br>&gt; よくわかってません、すみません。(^^;;;<br><br>げんたさん方の書き込みあるもので、<br>変換できない文字が混入したファイルを開いて保存すると，<br>内容が変わってしまう問題をできる範囲（JISとUTF-7以外）<br>で解決したいです。それの利点は、UNICODE版では誤って<br>読み込むと必ず文字化けするので、<br>あんまりないですね・・・。<br><br>情けないことに、<br>描画処理の方を変更する自信がないので、<br>このまんまではペンディングでしょうか。<br></div></section>
    <ul><li><section><h1 id=791>
    <span class="no">[791]</span>
    <a class="thread-title" href="#791">Re4:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-01-27T18:31:52">2009年01月27日 18:31</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; 変換できない文字が混入したファイルを開いて保存すると，<br>&gt; 内容が変わってしまう問題をできる範囲（JISとUTF-7以外）<br>&gt; で解決したいです。<br><br>そういう要望もあった(&gt;&gt;dev:5040)ので、できるならそうするのがいいんじゃないでしょうか。<br>今回のパッチを適用したsakuraで、とあるzipファイルをSJISで開いて中のファイル名を変更して保存、解凍してみたらちゃんと変更後のファイル名で抽出されました。(^^;;;<br>＃確か前回のパッチではうまくいかなかった<br><br>&gt; 情けないことに、<br>&gt; 描画処理の方を変更する自信がないので、<br>&gt; このまんまではペンディングでしょうか。<br><br>不正文字を'〓'で表示する（色はコントロールコード指定色）ようにしたパッチを作ってみました。（PatchUnicode#2478365に追加）<br>こんなイメージでしょうか？</div></section>
    <ul><li><section><h1 id=792>
    <span class="no">[792]</span>
    <a class="thread-title" href="#792">Re5:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-01-27T19:03:22">2009年01月27日 19:03</time></h1>
    <div class="body">バイナリ絡みで気づいたんですが、<br>奇数サイズのファイルをUnicodeで開くと末尾１バイトを捨ててしまうようです。<br>情報が消えるよりはダミーで１バイト（0x00？）追加して読むほうがいいんでしょうかね？</div></section>
    <ul><li><section><h1 id=793>
    <span class="no">[793]</span>
    <a class="thread-title" href="#793">Re6:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-01-28T14:13:13">2009年01月28日 14:13</time></h1>
    <div class="body">▼ ryoji さん<br>&gt; 不正文字を'〓'で表示する<br>&gt; （色はコントロールコード指定色）ようにしたパッチを<br>&gt; 作ってみました。（PatchUnicode#2478365に追加）<br>&gt; こんなイメージでしょうか？<br><br>フォローありがとうございます。<br>良い感じじゃないですかー（嬉）<br>イメージはそんな感じでO.K.です。<br><br>&gt; 奇数サイズのファイルをUnicodeで開くと<br>&gt; 末尾１バイトを捨ててしまうようです。<br>&gt; 情報が消えるよりはダミーで１バイト（0x00？）<br>&gt; 追加して読むほうがいいんでしょうかね？<br><br>いま、CUnicode.cpp を変更しているのですが、<br>読み込みソースを const char* 型に指定して、<br>最後の半端な一バイトは一応、<br>U+D800からU+D8FFまでに保存するようにしています。<br>（いまは苦手なバグとり中です）<br><br>File -&gt; CNativeW -&gt; CMemory と型変換されている<br>場合のこと考えると、読みこんだファイルのでーたを<br>CMemoryに保管させる作業をするよりは、<br>ダミーで1バイト追加のほうがめんどくなさそうなので、<br>とりあえずその方向でどうでしょう。<br></div></section>
    <ul><li><section><h1 id=794>
    <span class="no">[794]</span>
    <a class="thread-title" href="#794">Re7:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-01-29T16:46:00">2009年01月29日 16:46</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; いま、CUnicode.cpp を変更しているのですが、<br>&gt; 読み込みソースを const char* 型に指定して、<br>&gt; 最後の半端な一バイトは一応、<br>&gt; U+D800からU+D8FFまでに保存するようにしています。<br><br>あれれ？<br>別の文字コードからの読み書きで内部Unicodeに格納する際に変換不可文字をサロゲート片にマップするのは良いとして、Unicodeの読み書きでまで未定義文字をサロゲート片にマップしてます？<br>Unicode未定義文字は未定義文字として、無変換のまま内部Unicodeメモリに置くほうがいいんじゃないでしょうか。<br>例えば、現サクラでは未定義扱いだけどUnicode 5.1では定義済みの麻雀牌(U+1F000-U+1F02F)１文字が４個の不正文字に分離してエディタ画面に表示されるのは不自然だし(*1)、いろいろ扱いにくくなるんじゃないですか(*2)？なんか、こういう特殊扱いはバグの温床になりそうな、やな予感がするデス。(^^;;;<br><br>(*1) メモ帳で開いたら１文字なのにサクラで開くと４文字、とか。<br>(*2) クリップボードへのコピーでは４個の不正文字を１文字の麻雀牌に戻しておかないと正しいコードでメモ帳に貼り付かない、など、さまざまな処理でいちいち変換が必要になるかも。<br><br>ひょっとして、無変換だと奇数バイトサイズのファイルを同じサイズで保存できないから、という理由でそういう処理にしたのでしょうか？。でも、付加的な１バイトが増加するだけで、もともとのデータが保持されるなら、それは目を瞑ってもいいかなと思うんですけど。ANSI版だったらUnicode読み書きではバイナリは保持されなかったわけで、それと比べれば．．．、テキストの操作性に違和感が現われるまでのことをしてバイナリサイズ保持にこだわることはないと思います。<br><br>あと、'〓'表示にするのはせいぜい「非文字(Noncharacters)」として定義された66文字(*3)とサロゲート片だけにしておいて、未定義文字は従来どおり、あるがままの文字描画に任せたほうがいいかな、と思いました。麻雀牌がちゃんと麻雀牌として表示されるかどうかは別として。他エディタでもそうしてるような気がします。<br><br>(*3) 第00面から第16面までの各面の最後の2ポイント(U+nFFFE,U+nFFFF)およびU+FDD0-U+FDEF。<br><a href=http://unicode.org/versions/Unicode4.0.0/ch15.pdf target=_top><nobr>http://<wbr>unicode.<wbr>org/<wbr>versions<wbr>/<wbr>Unicode4<wbr>.<wbr>0.<wbr>0/<wbr>ch15.<wbr>pdf</nobr></a></div></section>
    <ul><li><section><h1 id=795>
    <span class="no">[795]</span>
    <a class="thread-title" href="#795">Re8:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-01-30T13:15:36">2009年01月30日 13:15</time></h1>
    <div class="body">▼ ryojiさん<br>&gt; あれれ？<br>&gt; 別の文字コードからの読み書きで内部Unicodeに格納する際に変換不可文字を<br>&gt; サロゲート片にマップするのは良いとして、Unicodeの読み書きでまで<br>&gt; 未定義文字をサロゲート片にマップしてます？<br><br>&gt; Unicode未定義文字は未定義文字として、無変換のまま<br>&gt; 内部Unicodeメモリに置くほうがいいんじゃないでしょうか。<br><br>たとえば、以下のような文字列がUTF-7と判別されないために<br>_CheckUtf16Charで、未定義コードポイントをCHARSET_BINARYにしていました。。。<br><br>「d+hG5ugj9r46NRQqEZMyppcHgFCNCjOO9VCdsCM<br>s6tjoJ6mkE66befz58aqNKRHQ」<br><br>（これは単なる BASE64文字列で、ASCII7 と判定されることを<br>　期待してます。）<br><br>Blocks.txt は頻繁に変わらないものと頭で思い込んでいたのですが、<br>実際はちょくちょく変るんですね^^;<br>Unicode のバージョンが上がるたびに Block.txt の情報を反映させる<br>必要があるのも、一応それ用のプログラムは用意してあるのですが、<br>うっかり反映し忘れたときのことを考えると「・・・」ですね。<br><br><a href=http://sakura.qp.land.to/?Develop%2F9 target=_top><nobr>http://<wbr>sakura.<wbr>qp.<wbr>land.<wbr>to/?<wbr>Develop%<wbr>2F9</nobr></a><br><br>どうしよう。。。<br></div></section>
    <ul><li><section><h1 id=796>
    <span class="no">[796]</span>
    <a class="thread-title" href="#796">Re9:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-01-30T16:41:39">2009年01月30日 16:41</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; たとえば、以下のような文字列がUTF-7と判別されないために<br>&gt; _CheckUtf16Charで、未定義コードポイントをCHARSET_BINARYにしていました。。。<br><br>■文字コード判別<br>今の_CheckUtf16Char関数をそのまま継続して利用すればいいと思います。<br><br>■不正コード表示<br>不正コード判定関数（非文字コードポイント＆サロゲート片）を新たに作るなりしてそれを利用すればいいと思います。<br><br>■内部保持コード<br>他コード指定のファイル読み書きでは変換不可文字（ファイル）はサロゲート片（メモリ）に変換して出し入れすればいいと思います。<br>Unicode指定のファイル読み書きでは未定義文字でも何でも無変換で出し入れすればいいと思います。<br><br>それで何か問題ありますか？<br><br>【追記】<br>現状パッチ（ChgCodeConv20090128__r1520_uni.patch）だと、CUnicode::_UnicodeToUnicode_in()がUniToUni_in()を呼び出したときにバッファオーバーラン（nDstLen &gt;= nSrcLen）でクラッシュする危険がありそうです。</div></section>
    <ul><li><section><h1 id=800>
    <span class="no">[800]</span>
    <a class="thread-title" href="#800">Re10:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-02-03T16:46:29">2009年02月03日 16:46</time></h1>
    <div class="body">&gt; ■不正コード表示<br>&gt; 不正コード判定関数（非文字コードポイント＆サロゲート片）を新たに作るなりして<br>&gt; それを利用すればいいと思います。<br>&gt;<br>&gt; ■内部保持コード<br>&gt; 他コード指定のファイル読み書きでは変換不可文字（ファイル）は<br>&gt; サロゲート片（メモリ）に変換して出し入れすればいいと思います。<br>&gt; Unicode指定のファイル読み書きでは未定義文字でも何でも無変換で<br>&gt; 出し入れすればいいと思います。<br><br>・_CheckUtf16,CheckUtf8,CheckUtf7BPartに引数を追加して、変換のときは、予約文字を通常の文字として扱うように変更しました（＾＾<br>・Unicode で1バイトかける問題で、ダミー1バイトを追加するだけでは不十分（データが変化してしまう）なので、CFileLoad::GetNextLineCharCode を書き直して修正しました（＾＾<br><br>PatchUnicode #2478365<br></div></section>
    <ul><li><section><h1 id=801>
    <span class="no">[801]</span>
    <a class="thread-title" href="#801">Re11:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-04T01:45:26">2009年02月04日 01:45</time></h1>
    <div class="body">ちょっと今はじっくり考える余力が無いので、ちらっと見て思った点だけ書いておきます。<br>＃思い違いがあったらその点はご容赦ください(^^;<br><br>■Unicode(BE/LE)指定でのファイル読み込み時の内部保持コード<br>ファイル内の非文字とサロゲート片（それと奇数バイトファイルの末尾１バイト）については相変わらずバイト単位に分離して別のサロゲート片（U+D800-D8FF)へと変換保持しているようですが、これも無変換で持つという別の選択肢があると思います。どっちがより良いのかちょっと判断がつきません。どちらでも良いとも言えますけど。(^^;;;<br>自分が独断で決めてしまっていいのなら、下記理由でえいや、と無変換で保持の方式にしてしまうと思いますが...<br><br>・クリップボード、ウィンドウメッセージ、パイプなど他アプリやDLLとのやりとりでも余計な心配をせず無変換のUTF-16のまま相互にやりとりできる（現パッチの方式でデータ交換時に変換が必須になってしまうケースが本当にあるかというと特には思いつかないけれど、無変換保持の方式のほうが後顧の憂いは無い）<br><br>・上記変換を実施する利点はUnicode読み書きでもサイズ増加を伴わないバイナリ非破壊ファイル保存ができることだけだと思われるが、サイズが変わらないことにさほどこだわる必要はない気がする（無変換保持方式では１バイト増えるにしても元のバイナリ部分は保持されるわけでANSI版よりは良好な結果が得られる）<br><br>この件については、他の人の意見も考慮して決めたほうがいいんじゃないかと思います。<br>皆さん、いかがでしょう？<br>げんたさんは、いかが？<br><br>■キャレット位置の文字コード表示<br>現状、U+D800-D8FFの内部コードをu0000-00FFとしてステータスバーに表示してますね（これも上記の内部保持コード変換を採用することが前提になってますが）。<br>u0000-00FFには別の文字割り当てがあるので、別の表記を考えたほうがいいと思います。<br><br>【前回追記したバッファオーバーランの懸念について】<br>nSrcLenがバイトサイズで、nDstLenがwchar_t単位の文字数だったら既に安全なサイズ（２倍）を確保してたことになるのかな？<br>すみません、どうだったかよく覚えてませんが、ここは「オーバーランが発生しない範囲の最少サイズ」に抑えておいてください。</div></section>
    <ul><li><section><h1 id=808>
    <span class="no">[808]</span>
    <a class="thread-title" href="#808">Re12:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-02-07T17:07:42">2009年02月07日 17:07</time></h1>
    <div class="body">コメントが付きにくそうなので、以下の修正をしたパッチを<br>PatchUnicode #2478365 にアップしました<br><br>1.　Unicodeの場合は、codecheckerを使わず、そのまま無変換のデータを<br>　保管するようにしました。半端な1バイトが見つかった場合は、<br>　ダミー文字'\0'を追加して、U+0000 から U+00FFにマップするように<br>　変更しました（ここはちょっと不安）<br>2.　U+D800からU+D8FFに乗せられたバイナリ値は、ステータスバーに?XXと表示する<br>　ように変更しました。<br></div></section>
    <ul><li><section><h1 id=813>
    <span class="no">[813]</span>
    <a class="thread-title" href="#813">Re13:PatchUnicode#2478365no</a>
    <span class="author">uchi</span>
    <time datetime="2009-02-10T00:29:38">2009年02月10日 00:29</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; コメントが付きにくそうなので、以下の修正をしたパッチを<br>&gt; PatchUnicode #2478365 にアップしました<br>&gt; <br>&gt; 1.　Unicodeの場合は、codecheckerを使わず、そのまま無変換のデータを<br>&gt; 　保管するようにしました。半端な1バイトが見つかった場合は、<br>&gt; 　ダミー文字'\0'を追加して、U+0000 から U+00FFにマップするように<br>&gt; 　変更しました（ここはちょっと不安）<br>&gt; 2.　U+D800からU+D8FFに乗せられたバイナリ値は、ステータスバーに?XXと表示する<br>&gt; 　ように変更しました。<br><br>要望を出したuchiです。<br>パッチを使ってみました。<br>気付いた点（気になった点）を以下に記します。<br>1. UnicodeBEでの読み書きで、2バイトワードのhigh byte と low byte の入れ替えが行われていない。<br>2. NEC選定IBM拡張文字(Sjisでed40～eeec)等が未定義文字となっている。（1対多対応だから仕方がない？）<br>3. Unicodeの時 U+2FFFEが2文字に分解されて表示されている。<br>4. Unicodeの時 単独のU+D800～U+D8FFがコード表示で?xxで表示される。（書き込みでファイルは壊れませんでした）<br>5. 1バイト文字なので全角幅ではなく半角幅で表示してほしい。（要望）<br><br>1．2.以外は気にはなるがそんな物かというレベルです。<br>これがうまく動作すれば、メインエディタをunicode版に移行できそうです。<br><br>よろしくお願いします。</div></section>
    <ul><li><section><h1 id=815>
    <span class="no">[815]</span>
    <a class="thread-title" href="#815">Re14:PatchUnicode#2478365no</a>
    <span class="author">Uchi</span>
    <time datetime="2009-02-10T21:07:48">2009年02月10日 21:07</time></h1>
    <div class="body">ラスティブさんの<br>ChgCodeConv20090209__r1524_uni<br>を試して見ました。<br>UncodeBE ですが、読み込みはOkでした。<br>書き込みは、修正されていませんでした。<br>U+D800～U+D8FFはちゃんと表示されていました。<br><br>以上報告だけさせていただきます。</div></section>
    <ul><li><section><h1 id=829>
    <span class="no">[829]</span>
    <a class="thread-title" href="#829">Re15:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-02-13T11:31:05">2009年02月13日 11:31</time></h1>
    <div class="body">以下の理由で、パッチをロールバックしました（汗<br><br>・NICODEとUNICODEBEだけ無変換で保持しても、SJISやEUC、UTF8は変換して保持するため、内部から外部へコードを持ち出すときや外部から内部へコードを持ち込むときの変換処理は欠かせない。UNICODEとUNICODEBEを特別扱いしてもそれは同じなので、いっそのこと特別扱いしない方がやりやすい。（バイナリ文字を半角で表示させるために、CNativeW::GetKetaOfCharで現在の文字コードを取得するという操作などが、特別扱いしない場合はなくてもよい。）<br><br><br>前回（20090203版）からの変更：<br><br>1.　Clipboard::GetText, Clipboard::SetText, Command_INSTEXT,<br>　マクロの F_GETSELECTED, F_GETLINESTR に<br>　内部コード（U+D800からU+D8FFまでにバイナリを乗せて表現する形式）<br>　&lt;-&gt;外部コード（普通のUTF-16LE）の変換処理を施しました。<br><br>2.　1バイトのバイナリを表現するときに?XXという表記を使用するように<br>　変更しました。<br><br>3.　U+D800からU+D8FFまでに乗せられている1バイトデータを、<br>　半角で表示するようにしました。<br><br><br>気になる点：<br><br>　GetSelectedString で取得したバイナリ混在テキストを<br>InsText でエディタ側に戻したら、データは変わらないけど<br>バイナリ扱いだった隣り合った2バイトが結合されて、<br>文字として表示されたりする。<br>データの内容は変わらないから良しとしましょうか、<br>どうでしょうか。<br><br><br>-----<br>▼ Uchi さん<br>1. UnicodeBEでの読み書きで、2バイトワードのhigh byte と low byte の入れ替えが行われていない。<br>直しました ＾＾<br><br>2. NEC選定IBM拡張文字(Sjisでed40～eeec)等が未定義文字となっている。（1対多対応だから仕方がない？）<br>1対1対応を維持するため、ここは直していません。＾＾;;;<br><br>3. Unicodeの時 U+2FFFEが2文字に分解されて表示されている。<br>U+2FFFE が Noncharacter のため、バイナリとして扱っています。<br>（で、あっていますよね。。。少し不安です。）<br><br>4. Unicodeの時 単独のU+D800～U+D8FFがコード表示で?xxで表示される。（書き込みでファイルは壊れませんでした）<br>直しました ＾＾<br><br>5. 1バイト文字なので全角幅ではなく半角幅で表示してほしい。（要望）<br>CNativeW::GetKetaOfChar をいじって、半角で表示するようにしました。<br></div></section>
    <ul><li><section><h1 id=830>
    <span class="no">[830]</span>
    <a class="thread-title" href="#830">Re16:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-13T19:21:36">2009年02月13日 19:21</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; SJISやEUC、UTF8は変換して保持するため、内部から外部へコードを持ち出すときや外部から内部へコードを持ち込むときの変換処理は欠かせない。<br><br>すみませんが、この部分がどういう意味か、具体例で教えてください。<br><br>プログラム間の文字のやりとりは基本的にUNICODEを用いることになるはずで、元のコードへ逆変換して渡す、というようなことはほとんど不要と思うのですが。<br>ANSI版アプリとのやりとりでSJISが壊れる程度なら気にしなくていいと思います。というか、その程度のことを実現するために影響範囲が爆発的に増えるのならやめたほうがいいんじゃないですか？</div></section>
    <ul><li><section><h1 id=832>
    <span class="no">[832]</span>
    <a class="thread-title" href="#832">Re17:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-02-14T13:00:26">2009年02月14日 13:00</time></h1>
    <div class="body">&gt; &gt; ▼ ラスティブさん<br>&gt; &gt; SJISやEUC、UTF8は変換して保持するため、<br>&gt; &gt; 内部から外部へコードを持ち出すときや<br>&gt; &gt; 外部から内部へコードを持ち込むときの<br>&gt; &gt; 変換処理は欠かせない。<br>&gt;<br>&gt; すみませんが、この部分がどういう意味か、具体例で教えてください。<br><br>バイナリデータが混在したテキストにおいて、<br>内部では、バイナリの部分をU+D800からU+D8FFにエンコードしています。<br>それを外へ持ち出すときは、U+D800からU+D8FFを0x00から0xFFに<br>戻す処理が要るんじゃないかなと思います。<br>たとえば、ビュー内では、ステータスバーに"?00","?01","?02"と<br>表示されるバイト列（データとしてはU+D800,U+D801,U+D802）を、<br>クリップボードに保管するときは、データを0x00,0x01,0x02に<br>戻しておく、他には、マクロでGetSelectedString,GetLineStrで<br>ビューの文字列が外部へ持ち出される時も、0x01,0x02,0x03に<br>戻しておく処理が必要です。その逆で、マクロでInsTextを<br>実行するときは、UNICODEとして読めない文字をU+D800からU+D8FFに<br>エンコードしておく処理が必要になる（文字コードがSJIS,EUC,UTF8の場合）<br>と思うので、その処理をCommand_INSTEXTに記述しておきました。<br><br>その変換の過程で、隣り合ったバイトデータが結合されて<br>UNICODE文字になるという問題が。。。<br><br>こんな説明でよろしいでしょうか。。。<br></div></section>
    <ul><li><section><h1 id=833>
    <span class="no">[833]</span>
    <a class="thread-title" href="#833">Re18:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-14T16:01:11">2009年02月14日 16:01</time></h1>
    <div class="body">ファイル／メモリどっちの入出力でも<br>・UTF-16は無変換<br>・他コードはバイナリ部をUTF-16のU+D800-D8FFに変換<br>でいいと思います。<br><br>■UNICODE無変換方式（僕の案です）<br><br>●ファイル入出力<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>ファイル(SJIS):                82 A0 EC FD 82 A0<br>※中央２バイトがバイナリで左右２バイトは'あ'<br><br>●ステータスバー表示<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>Unicode表示:                u3042 ud8ec ud8fd u3042<br>SJIS表示:                        82a0 ?ec ?fd 82a0<br><br>●クリップボードのデータ入出力<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>CF-UNICODETEXT:                42 30 EC D8 FD D8 42 30<br>CF-TEXT:                        82 A0 EC FD 82 A0<br><br><br>■現状のパッチ（ChgCodeConv20090212b__r1524_uni）<br>上記と同じファイルで以下のようになります。<br><br>●ファイル入出力<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>ファイル(SJIS):                82 A0 EC FD 82 A0<br><br>●ステータスバー表示<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>Unicode表示:                u3042 ?ec ?fd u3042 ★<br>SJIS表示:                        82a0 ?ec ?fd 82a0<br><br>●クリップボードのデータ入出力<br>内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>CF-UNICODETEXT:                42 30 EC FD 42 30 ★<br>CF-TEXT:                        82 A0 3F 82 A0 ★<br><br>★の部分がよくないです。<br>内部メモリとCF-UNICODETEXTのコードが違っているのでビューからクリップボードにコピーして検索画面の検索条件に貼り付けた文字列はもとの文字列にヒットしません。<br>（範囲選択して自動的に検索条件に入力された場合には同じコードになってヒットします）<br>SJISファイルとCF-TEXTは同じSJISなのに別のコードに変化してしまいました。<br>※CF-TEXTが変化してしまうようでは、「外へ持ち出すときは変換処理は欠かせない」は、まるで意味が無いですね。</div></section>
    <ul><li><section><h1 id=834>
    <span class="no">[834]</span>
    <a class="thread-title" href="#834">Re19:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-14T19:55:30">2009年02月14日 19:55</time></h1>
    <div class="body">すみません。m(__)m<br>自己レスにしようとして、修正にしてしまいました。（&gt;&gt;unicode:833）<br><br>以下は単なる修正後の文の引用です。orz.<br><br>&gt; ファイル／メモリどっちの入出力でも<br>&gt; ・UTF-16は無変換<br>&gt; ・他コードはバイナリ部をUTF-16のU+D800-D8FFに変換<br>&gt; でいいと思います。<br>&gt; <br>&gt; ■UNICODE無変換方式（僕の案です）<br>&gt; <br>&gt; ●ファイル入出力<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; ファイル(SJIS):                82 A0 EC FD 82 A0<br>&gt; ※中央２バイトがバイナリで左右２バイトは'あ'<br>&gt; <br>&gt; ●ステータスバー表示<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; Unicode表示:                u3042 ud8ec ud8fd u3042<br>&gt; SJIS表示:                        82a0 ?ec ?fd 82a0<br>&gt; <br>&gt; ●クリップボードのデータ入出力<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; CF-UNICODETEXT:                42 30 EC D8 FD D8 42 30<br>&gt; CF-TEXT:                        82 A0 EC FD 82 A0<br>&gt; <br>&gt; <br>&gt; ■現状のパッチ（ChgCodeConv20090212b__r1524_uni）<br>&gt; 上記と同じファイルで以下のようになります。<br>&gt; <br>&gt; ●ファイル入出力<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; ファイル(SJIS):                82 A0 EC FD 82 A0<br>&gt; <br>&gt; ●ステータスバー表示<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; Unicode表示:                u3042 ?ec ?fd u3042 ★<br>&gt; SJIS表示:                        82a0 ?ec ?fd 82a0<br>&gt; <br>&gt; ●クリップボードのデータ入出力<br>&gt; 内部メモリ(UTF-16):        42 30 EC D8 FD D8 42 30<br>&gt; CF-UNICODETEXT:                42 30 EC FD 42 30 ★<br>&gt; CF-TEXT:                        82 A0 3F 82 A0 ★<br>&gt; <br>&gt; ★の部分がよくないです。<br>&gt; 内部メモリとCF-UNICODETEXTのコードが違っているのでビューからクリップボードにコピーして検索画面の検索条件に貼り付けた文字列はもとの文字列にヒットしません。<br>&gt; （範囲選択して自動的に検索条件に入力された場合には同じコードになってヒットします）<br>&gt; SJISファイルとCF-TEXTは同じSJISなのに別のコードに変化してしまいました。<br>&gt; ※CF-TEXTが変化してしまうようでは、「外へ持ち出すときは変換処理は欠かせない」は、まるで意味が無いですね。</div></section>
    </li><li><section><h1 id=835>
    <span class="no">[835]</span>
    <a class="thread-title" href="#835">Re19:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-14T20:08:08">2009年02月14日 20:08</time></h1>
    <div class="body">&gt; CF-TEXT:                        82 A0 3F 82 A0 ★<br>(snip)<br>&gt; SJISファイルとCF-TEXTは同じSJISなのに別のコードに変化してしまいました。<br><br>理想はCF-TEXTもSJISファイルと同じになることですが、当面はSJISでのメモリ経由インターフェースでバイナリ部分は化けてもいいと思います。<br>※相手がCF-UNICODETEXTをサポートしていればCF-TEXTは無視されるだけだし、仮にCF-TEXTで受け取ってもバイナリ部は与えた通りに受け取られる保証もない。<br>今回の、ファイルのバイナリ部が化けないようにするのと同じで、おいおい、やりたい人がやればいい（そういう人がいなければ放置していい）レベルのものだと思います。<br><br>UTF-16でのファイル入出力を無変換にしていただければ（UTF-16でのメモリ経由も従来のまま手を加えずに使えるはずなので）、ラスティブさんには当初の目的であるファイル入出力でバイナリ保持する部分とステータスバー表示あたりまで作っていただくだけで、メモリ経由のインターフェースまで手出しする必要は無くなると思います。<br><br>外部コード(通常UTF-16)⇔内部コード(変形UTF-16)などという小手先のごまかし変換を持ち込むからプログラム中に散在するあらゆる場所で「変換処理が欠かせない」になってしまうのであって、無変換なら「変換処理が必要になることは滅多にない」で済むのです。<br><br>特殊なのは、他コード⇔UTF-16変換時にバイナリをU+D800-D8FFに変換する処理だけで、他コードから変換されたU+D800-D8FFは他コードに変換するとき以外は純粋なUTF-16値として扱ってしまえば良い、です。<br>多くのアプリで、他コード⇒UTF-16変換時にバイナリ部を独自変換で'?'などの特定の文字に変換してそのまま'?'の文字として扱うのと同様、上記変換でUTF-16値（U+D800-D8FF）に変換してしまうことに決めているのですから。</div></section>
    <ul><li><section><h1 id=836>
    <span class="no">[836]</span>
    <a class="thread-title" href="#836">Re20:PatchUnicode#2478365no</a>
    <span class="author">ラスティブ</span>
    <time datetime="2009-02-15T12:10:14">2009年02月15日 12:10</time></h1>
    <div class="body">&gt; 内部独自コード化（UTF-16相手にも変換が必要）には反対です。<br>&gt; 今の作りでは無謀と思います。<br><br>ご尤もです。<br>厳密には DLL にまで変換して参照させることになるので、<br>自分ではできないですね・・・。<br>今のままでは GetSelectedString で得た文字列を<br>そのあとすぐに InsText で挿入したら、<br>文字化けが起こりますし。。。これではいかんですね。<br><br>&gt; 多くのアプリで、他コード⇒UTF-16変換時にバイナリ部を<br>&gt; 独自変換で'?'などの特定の文字に変換してそのまま'?'の文字として<br>&gt; 扱うのと同様、上記変換でUTF-16値（U+D800-D8FF）に変換してしまう<br>&gt; ことに決めている<br><br>単にバイナリを開いて不意に保存してしまった時の<br>安全性確保のためのパッチだということで。<br><br>パッチをアップしました。<br>PatchUnicode #2478365<br></div></section>
    </li></ul></li></ul></li></ul></li></ul></li><li><section><h1 id=831>
    <span class="no">[831]</span>
    <a class="thread-title" href="#831">Re16:PatchUnicode#2478365no</a>
    <span class="author">ryoji</span>
    <time datetime="2009-02-13T19:42:23">2009年02月13日 19:42</time></h1>
    <div class="body">▼ ラスティブさん<br>&gt; 1.　Clipboard::GetText, Clipboard::SetText, Command_INSTEXT,<br>&gt; 　マクロの F_GETSELECTED, F_GETLINESTR に<br>&gt; 　内部コード（U+D800からU+D8FFまでにバイナリを乗せて表現する形式）<br>&gt; 　&lt;-&gt;外部コード（普通のUTF-16LE）の変換処理を施しました。<br><br>例えば、ビューからクリップボードにコピーして検索画面の検索条件に貼り付けた文字と、カーソル位置から自動的に拾って検索条件に入力された文字は同じになりますか？拾ったもとの場所にちゃんとヒットしますか？</div></section>
    </li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></li></ul></body></html>